package com.dream.service.user.api;


import com.dream.common.model.response.BaseListResponse;
import com.dream.common.model.response.BaseResponse;
import com.dream.service.user.domain.entity.User;
import com.dream.service.user.domain.entity.UserAttr;
import com.dream.service.user.domain.model.UserModel;


/**
 * Created by kangd on 2016/3/24.
 */
public interface UserService {

    /**
     * 注册
     * @param uuid
     * @param email 注册邮箱
     * @param nickname 昵称
     * @param passwd 密码
     * @return  pin uuid token email nickname
     */
    public BaseResponse<User> signUp(String uuid, String email, String nickname, String passwd, String source) throws Exception;


    /**
     * 注册用户登陆
     * @param uuid
     * @param email 注册邮箱
     * @param passwd 密码
     * @return pin uuid token email nickname
     */
    public BaseResponse<User> login(String uuid,String email,String passwd);


    /**
     * 找回密码,会向邮箱发送一分邮件
     * @param email 邮箱
     * @return
     */
    public BaseResponse<User> forgotPWD(String email);

    /**
     *第三方登录
     * @param uuid
     * @param loginType
     * @param returnInfo
     * @return  pin uuid token email nickname
     */
    public BaseResponse<User> trdPtyLogin(String uuid,Integer loginType, String returnInfo,String source) throws Exception;

    /**
     * 退出登录
     * @param pin
     * @param token
     * @return
     */
    public BaseResponse<Boolean> signOut(String pin,String token);

    /**
     * 获取用户信息
     * @param pin
     * @return
     */
    public BaseResponse<User> getUserDetailInfo(String pin);

    /**
     * 获取用户信息
     * @param pin
     * @return
     */
    public BaseResponse<UserAttr> getUserAttr(String pin);

    /**
     * 修改用户信息
     * @param userModel
     * @return
     */
    public BaseResponse<Boolean> modifyUserInfo(UserModel userModel);

    /**
     * 修改密码
     * @param userModel
     * @param oldPwd
     * @return
     */
    public BaseResponse<Boolean> modifyUserPWD(UserModel userModel,String oldPwd);

    /**
     * 忘记密码-》修改密码请求
     * @param pw 新密码
     * @param tp 邮件中url的参数
     * @param sig 邮件中url的参数
     * @return
     */
    public BaseResponse<Boolean> modifyFgtPwd(String pw,String tp,String sig);

    /**
     *
     * 返回邀请人的pin
     * @param pin 要绑定邀请码的用户，也就是被邀请人pin
     * @param inviteCode 邀请码
     * @return
     */
    public BaseResponse<String> bindInviteCode(String pin,String inviteCode);

    /**
     * 返回第三方登录绑定的邮箱
     * @param thirdID
     * @return
     */
    public BaseResponse<String> getThirdLoginEmail(String thirdID,int loginType);

    /**
     * 根据用户pin来获取用户自己的邀请码
     * @param pin
     * @return
     */
    public BaseResponse<String> getInviteCode(String pin);

    /**
     * 根据用户邮箱或者邀请码返回用户信息列表
     * 当输入参数是用户登录邮箱，可能返回多个用户
     * 当输入参数是用户邀请码，最多能返回一个用户
     * @return List-User
     */
    public BaseListResponse getUserByEmailOrInviteCode(String emailOrCode);

}

